package controlador;

import clases.TipoMovimiento;
import java.sql.SQLException;
import java.util.ArrayList;
import modelo.Conexion;
import modelo.MdlTipoMovimiento;

/**
 *
 * @author Edder
 * @version 1.0
 */
public class CtrlTipoMovimiento implements Controlador<TipoMovimiento>{
    private final MdlTipoMovimiento mdlTipoMovimiento;
    private final Conexion cnx;
    
    public CtrlTipoMovimiento(){
        this.mdlTipoMovimiento = new MdlTipoMovimiento();
        this.cnx = Conexion.getConexionDefault();
    }

    /**
     *
     * @param tipoMovimiento
     * @param cnx
     * @throws ClassNotFoundException
     * @throws SQLException
     */
    @Override
    public void insert(TipoMovimiento tipoMovimiento, Conexion cnx) throws ClassNotFoundException, SQLException{
        if(cnx == null){
            this.cnx.abrirConexion();
            this.cnx.abrirTransaccion();
            this.mdlTipoMovimiento.insert(tipoMovimiento, this.cnx);
            tipoMovimiento.setIdTipoMovimiento(this.mdlTipoMovimiento.getLastId(this.cnx));
            this.cnx.cerrarTransaccion();
            this.cnx.cerrarConexion();
        }else{
            this.mdlTipoMovimiento.insert(tipoMovimiento, cnx);
            tipoMovimiento.setIdTipoMovimiento(this.mdlTipoMovimiento.getLastId(cnx));
        }
    }
    
    /**
     *
     * @param tipoMovimiento
     * @param cnx
     * @throws ClassNotFoundException
     * @throws SQLException
     */
    @Override
    public void update(TipoMovimiento tipoMovimiento, Conexion cnx) throws ClassNotFoundException, SQLException{
        if(cnx == null){
            this.cnx.abrirConexion();
            this.mdlTipoMovimiento.update(tipoMovimiento, this.cnx);
            this.cnx.cerrarConexion();
        }else{
            this.mdlTipoMovimiento.update(tipoMovimiento, cnx);
        }
    }
    
    /**
     *
     * @param query
     * @param cnx
     * @return
     * @throws ClassNotFoundException
     * @throws SQLException
     */
    public ArrayList<TipoMovimiento> getTipoMovimientos(String query, Conexion cnx) throws ClassNotFoundException, SQLException{
        ArrayList<TipoMovimiento> tipoMovimientos;
        if(cnx == null){
            this.cnx.abrirConexion();
            tipoMovimientos = this.mdlTipoMovimiento.getTipoMovimientos(query, this.cnx);            
            this.cnx.cerrarConexion();
        }else{
            tipoMovimientos = this.mdlTipoMovimiento.getTipoMovimientos(query, cnx);
        }
        return tipoMovimientos;
    }
    
    /**
     *
     * @param id
     * @param cnx
     * @return
     * @throws ClassNotFoundException
     * @throws SQLException
     */
    @Override
    public TipoMovimiento get(int id, Conexion cnx) throws ClassNotFoundException, SQLException{
        TipoMovimiento tipoMovimiento;
        if(cnx == null){
            this.cnx.abrirConexion();
            tipoMovimiento = this.mdlTipoMovimiento.get(id, this.cnx);
            this.cnx.cerrarConexion();
        }else{
            tipoMovimiento = this.mdlTipoMovimiento.get(id, cnx);
        }
        return tipoMovimiento;
    }
}
